{
 "cells": [
  {
   "cell_type": "markdown",
   "source": [
    "## Поворот рандомного вектора на рандомные углы вокруг осей X, Y, Z"
   ],
   "metadata": {
    "collapsed": false
   }
  },
  {
   "cell_type": "markdown",
   "source": [],
   "metadata": {
    "collapsed": false
   }
  },
  {
   "cell_type": "markdown",
   "source": [
    "#### Импорты"
   ],
   "metadata": {
    "collapsed": false
   }
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "%matplotlib inline\n",
    "import random\n",
    "\n",
    "import matplotlib.pyplot as plt\n",
    "from matplotlib.ticker import AutoMinorLocator\n",
    "\n",
    "from robobase.rotate import randomRotate"
   ]
  },
  {
   "cell_type": "markdown",
   "source": [
    "#### Создание рандомного вектора размером 1x3"
   ],
   "metadata": {
    "collapsed": false
   }
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "outputs": [],
   "source": [
    "origin = [2 * random.random() - 1 for i in range(3)]"
   ],
   "metadata": {
    "collapsed": false,
    "pycharm": {
     "name": "#%%\n"
    }
   }
  },
  {
   "cell_type": "markdown",
   "source": [
    "#### Создание нового вектора, повернутого на рандомный угол вокруг осей x, y, z"
   ],
   "metadata": {
    "collapsed": false
   }
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "outputs": [],
   "source": [
    "rotatedV = randomRotate(origin)\n"
   ],
   "metadata": {
    "collapsed": false,
    "pycharm": {
     "name": "#%%\n"
    }
   }
  },
  {
   "cell_type": "markdown",
   "source": [
    "### Отрисовка векторов"
   ],
   "metadata": {
    "collapsed": false
   }
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "outputs": [
    {
     "data": {
      "text/plain": "<Figure size 432x288 with 1 Axes>",
      "image/png": "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\n"
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "fig = plt.figure()\n",
    "ax = fig.add_subplot(111, projection='3d')\n",
    "\n",
    "\n",
    "lengthAxis = 2\n",
    "ax.plot([0, lengthAxis], [0, 0], [0, 0], color=\"red\")\n",
    "ax.plot([0, 0], [0, lengthAxis], [0, 0], color=\"green\")\n",
    "ax.plot([0, 0], [0, 0], [0, lengthAxis], color=\"blue\")\n",
    "\n",
    "\n",
    "ax.plot([0, origin[0]], [0, origin[1]], [0, origin[2]], linestyle=\"dashed\", color=\"black\")\n",
    "ax.plot([0, rotatedV[0]], [0, rotatedV[1]], [0, rotatedV[2]], linestyle=\"dotted\", color=\"black\")\n",
    "\n",
    "\n",
    "ax.scatter(origin[0], origin[1], origin[2], c='red', s=50)\n",
    "ax.text(origin[0], origin[1], origin[2],\n",
    "        \"(\" + str(round(origin[0], 3)) + \", \" + str(round(origin[1], 3)) + \", \" + str(round(origin[2], 3)) + \")\",\n",
    "        size=10, zorder=1, color='k')\n",
    "\n",
    "ax.scatter(rotatedV[0], rotatedV[1], rotatedV[2], c='blue', s=50)\n",
    "ax.text(rotatedV[0], rotatedV[1], rotatedV[2],\n",
    "        \"(\" + str(round(rotatedV[0], 3)) + \", \" + str(round(rotatedV[1], 3)) + \", \" + str(round(rotatedV[2], 3)) + \")\",\n",
    "        size=10, zorder=1, color='k')\n",
    "\n",
    "ax.grid(False)\n",
    "ax.set_xlabel('$X$', fontsize=20)\n",
    "ax.set_ylabel('$Y$', fontsize=20)\n",
    "ax.set_zlabel('$Z$', fontsize=20)\n",
    "ax.xaxis.set_minor_locator(AutoMinorLocator())\n",
    "ax.yaxis.set_minor_locator(AutoMinorLocator())\n",
    "ax.tick_params(which='major', length=10, width=2)\n",
    "ax.tick_params(which='minor', length=5, width=1)\n",
    "plt.show()"
   ],
   "metadata": {
    "collapsed": false,
    "pycharm": {
     "name": "#%%\n"
    }
   }
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 2
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython2",
   "version": "2.7.6"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 0
}